درسنامه آموزشی پودمان 3 دانش فنی پایه دهم شبکه و نرم افزار رایانه
فلوچارت
آیا تا به حال اندیشیدهاید
1- اگر بخواهید مراحل آماده شدن برای حضور در مدرسه، از لحظه بیدار شدن تا رسیدن به کلاس توضیح دهید، چطور آن را به تصویر میکشید؟
2- چرا استفاده از فلوچارت بهتر از نوشتن متن ساده است؟
از هنرجو انتظار میرود
1- الگوریتمهای طراحی شده را در قالب نمودار رسم کند.
2- بتواند الگوریتمهای نوشته شده را در نرمافزار فلوگوریتم اجرا کند.
استاندارد عملکرد
فلوچارتی برای حل مسائل رسم کند و مهارت استفاده از الگوریتمها را در زندگی واقعی و شغلی خود بهکار گیرد.
روندنما (Flowchart)
روندنما یک نمودار تصویری است که مراحل انجام یک فرایند، الگوریتم یا سیستم را با استفاده از نمادهای گرافیکی استاندارد نشان میدهد. این ابزار برای درک، تحلیل و طراحی الگوریتمها و فرایندهای پیچیده بهصورت ساده و بصری استفاده میشود (شکل زیر).

برخی از اشکال پایه برای ترسیم فلوچارت را در تصویر زیر میبینید (شکل زیر).
فعالیت (صفحهٔ 78 کتاب درسی)

فعالیت (صفحهٔ 79 کتاب درسی)

فعالیت (صفحهٔ 79 کتاب درسی)

فعالیت (صفحهٔ 80 کتاب درسی)
فلوچارت زیر را تکمیل کنید که با داشتن مدت مکالمه (ثانیه)، تعداد پیامکهای فارسی، تعداد پیامکهای لاتین، حجم اینترنت مصرفی (گیگابایت) و هزینه هر کدام با احتساب 6% مالیات و با دانستن هزینه تماسها، هر ثانیه 9/98 ریال و هر پیامک فارسی 89 ریال و پیامک لاتین 222 ریال هزینه دارد و هزینه بستههای اینترنت 2500 ریال محاسبه کند.

دستورات شرطی
در بسیاری از مسائل روزمره نیازمند تصمیمگیری بر اساس شرایط مختلف وجود دارد. به مثالهای زیر توجه کنید:
1- سیستم تشخیص چهرۀ گوشی هوشمند
اگر چهره تشخیص داده شد آنگاه قفل گوشی باز میشود.
در غیر اینصورت درخواست رمز عبور میکند.
2- استفاده از تخفیفات فروشگاه اینترنتی
اگر آخر ماه است آنگاه خرید شما شامل تخفیف 50 درصدی خواهد شد.
3- جستجوی تاکسی آنلاین
اگر راننده در شعاع 3 کیلومتری است پس درخواست را قبول کن.
در غیر اینصورت درخواست و ادامه جستجو
4- اپلیکیشن ورزشی
اگر تعداد قدمها به 6000 رسیده پس پیام «تبریک شما موفق شدید» نمایش داده میشود.
در غیر اینصورت پیام «تنها تعداد قدمها ـ 6000 مانده» نمایش داده میشود.
در همه این نمونهها در صورت برقراری شرایط کارها انجام خواهند شد. مشاهده میکنید از کلمه «اگر» برای بیان شرط استفاده شده است که در صورت برقراری شرط عملی باید انجام شود.
و در برخی از این نمونهها از اصطلاح «در غیر اینصورت» برای بیان عدم برقراری شرط استفاده شده است.

در فلوچارت، دستورات شرطی با شکل لوزی نمایش داده میشوند. داخل لوزی شرط نوشته میشود و از آن دو یا چند فلش خارج میشود که هر کدام به مسیر اجرای متفاوتی اشاره دارند (مثلاً یکی برای حالت درست و دیگری برای حالت نادرست شرط)
برای نوشتن شبه کد این نمونههای شرطی از قالبهای نمایش داده شده در جدول زیر استفاده میشود.
| دستور شرطی ساده | if (شرط) دستور(ها) End if |
| دستور شرطی دو حالته | If (شرط) دستور(ها) Else دستور(ها) End if |
| دستورات شرطی چند حالته | If (شرط 1) دستور(های) شرط 1 Else if (شرط 2) دستور(های) شرط 2 Else دستور(های) پیشفرض End if |
فعالیت (صفحهٔ 82 کتاب درسی)
جدول زیر را تکمیل کنید:

فعالیت (صفحهٔ 83 کتاب درسی)
الگوریتم تشخیص زوج و فرد بودن شماره تلفن همراه هنرجو: شماره همراه هنرجو را دریافت و بسته به زوج و فرد بودن آن مشخص میکند در کلاسهای فوق برنامهای که در روزهای زوج تشکیل خواهد شد شرکت کند یا در روزهای فرد.

فعالیت (صفحهٔ 83 کتاب درسی)
برای پیدا کردن بیشترین مقدار بین سه عدد (جدول زیر) را تکمیل کنید. سپس آن را با مقدار ورودی دلخواه آزمایش کنید.
الگوریتمی برای یافتن بزرگترین مقدار بین سه عدد را بنویسید. روند نمای آن را رسم کنید.

فعالیت (صفحهٔ 84 کتاب درسی)
الگوریتمی برای تعیین بخشپذیری دو عدد نوشته شده است. روندنمای آن را کامل کنید. آن را برای اعداد دلخواه بازنگری کنید.

دستورات حلقه / تکرار (loop)
در موارد بسیاری پیش میآید که باید یکسری از دستورات را به دفعات تکرار کنید، اگر در زمان نوشتن الگوریتم و یا رسم روندنما این دستورات تکراری را مداوم بنویسید؛ زمان زیادی را صرف خواهید کرد و ظاهر الگوریتم و نمودار نیز جالب نخواهد بود. برای پیادهسازی دستوراتی که باید تکرار شوند از مفهوم حلقه استفاده میشود. برای اجرای مکرر گروهی از دستورات که بلوک دستورات نامیده میشود استفاده از حلقهها به شما کمک خواهد کرد.
چنانچه بخواهید میانگین سه عدد را برای تعداد دانشآموزان کلاس که 38 نفر هستند، حساب کنید در این شرایط باید از حلقه استفاده کنید.
در شبه کد زیر دستورات مرحلۀ 2 تا 4 به تعداد 38 نفر باید تکرار شوند.

1- این شبه کد برای 38 نفر با دستور حلقه بازنویسی شده است.
2- متغیر Count یک شمارنده است که تعداد تکرار دستورات را مشخص میکند.
3- در خط 6 دستور If کنترل میکند آیا تعداد به 38 رسیده یا نه؟
4- و با دستور go step به ابتدای بلاک دستورات برمیگردد.
5- در این شبه کد ترتیب اجرای مراحل دستورات با دستور go step تغییر کرده است.
فعالیت (صفحهٔ 86 کتاب درسی)
الگوریتم تعیین مقسوم علیههای عدد طبیعی N و تعداد آنها در جدول آورده شده است. روندنمای آنرا رسم کنید.

کنجکاوی (صفحهٔ 86 کتاب درسی)
تحقیق کنید چه الگوریتم دیگری را برای تعیین تعداد مقسوم علیههای عدد طبیعی N میتوان نوشت. نتیجه را در کلاس برای همکلاسیهایتان ارائه دهید.
فعالیت (صفحهٔ 87 کتاب درسی)
الگوریتمی برای یافتن اعداد اول کوچکتر از 100 بنویسید.
تعریف عدد اول: عدد اول، عددی است که بر یک و خودش بخشپذیر باشد و یا فقط دو تا مقسوم علیه داشته باشد.
کنجکاوی (صفحهٔ 87 کتاب درسی)
تحقیق کنید چه الگوریتم دیگری را برای تعیین اول بودن عدد طبیعی N میتوان نوشت. نتیجه را در کلاس برای همکلاسیهایتان ارائه دهید.
فعالیت (صفحهٔ 88 کتاب درسی)
الگوریتم یافتن اعداد فرد طبیعی کوچکتر از 1000 نوشته شده است. روندنمای آن را رسم کنید. الگوریتم را بازنگری کنید.

فعالیت (صفحهٔ 89 کتاب درسی)
الگوریتمی برای یافتن مجموع مضارب 5 طبیعی کوچکتر از 100 را بنویسید. روند نمای آن را رسم کنید.

فعالیت (صفحهٔ 90 کتاب درسی)
الگوریتمی برای یافتن بزرگترین مقدار بین n عدد را بنویسید. روند نمای آن را رسم کنید.

فعالیت (صفحهٔ 91 کتاب درسی)
الگوریتمی برای حل معادله $(a{x^2} - bx + c) = 0$ نوشته شده است. روندنمای آن را رسم کنید.

فعالیت کلاسی (صفحهٔ 92 کتاب درسی)
الگوریتمی برای حل معادله ${(ax + b)^{10}} = 0$ بنویسید. روند نمای آن را رسم کنید.

فعالیت کلاسی (صفحهٔ 93 کتاب درسی)
الگوریتمی بنویسید که تاریخ تولد کاربر را به شمسی گرفته و به تاریخ میلادی تبدیل کند. روندنمای آن را رسم کنید.
فعالیت (صفحهٔ 94 کتاب درسی)
الگوریتمی بنویسید زمان را به ثانیه از کاربر دریافت کرده و آن را به شکل ساعت: دقیقه: ثانیه نمایش دهد. روندنمای آن را رسم کنید.

فعالیت (صفحهٔ 95 کتاب درسی)
الگوریتمی بنویسید که اندازه محیط و مساحت یک زمین به شکل مستطیل را با متر از کاربر دریافت کند و عرض و طول آن را به سانتیمتر نشان دهد. روندنمای آن را رسم کنید. $S = HW$ و $P = (H + W)2$
$H = (P - W)/2$ و مقدار $H$ را در معادله مساحت قرار دهید: $S = (P - W)/2W$ و سپس معادله درجه دوم را حل کنید.

فعالیت (صفحهٔ 96 کتاب درسی)
الگوریتمی بنویسید که بتواند عدد طبیعی N را از کاربر دریافت کرده و فاکتوریل آن را بهدست آورد. نماد فاکتوریل " ! " است.
$\eqalign{
& 0! = 1 \cr
& 1! = 1 \cr
& 2! = 1 \times 2 \cr
& 3! = 1 \times 2 \times 3 \cr} $

فلوگوریتم Flowgorithm
یک زبان برنامهنویسی رایگان برای مبتدیان است که مبتنی بر نمودارهای جریان گرافیکی است.
فعالیت (صفحهٔ 97 کتاب درسی)
نرمافزار را از سایت معتبر دانلود و در سیستم خود نصب کنید. با چند کلیک ساده میتوانید نرمافزار را نصب کنید.
معمولاً وقتی شما برای اولین بار برنامهنویسی را یاد میگیرید، اغلب از یکی از زبانهای برنامهنویسی مبتنی بر متن استفاده میکنید. بسته به زبان برنامهنویسی، این میتواند یک تجربه آسان یا بسیار دشوار باشد. بسیاری از زبانها شما را ملزم به نوشتن کدهای برنامهنویسی میکنند تا متن "سلام دنیا!" را نمایش دهند. این برای اکثر زبانهای شیگرا طبیعی است، اما مبتدیان به هیچ وجه این مفاهیم را یاد نمیگیرند.
با استفاده از فلوچارتها، میتوانید به جای تمام جزئیات یک زبان برنامهنویسی معمولی، روی مفاهیم برنامهنویسی تمرکز کنید. برنامهها را میتوان مستقیماً در Flowgorithm اجرا کرد (شکل زیر).
وقتی منطق برنامهنویسی را درک کنید، یادگیری یکی از زبانهای اصلی برای شما آسان خواهد بود Flowgorithm. میتواند فلوچارت شما را بهصورت تعاملی به بیش از 18 زبان تبدیل کند. این زبانها عبارتاند از C++ ،C ،جاوا، جاوا اسکریپت، پایتون، روبی، سویفت، ویژوال بیسیک دات نت و VBA مورد استفاده در آفیس.

مزایای استفاده از Flowgorithm
- یادگیری آسان الگوریتم بدون نیاز به کدنویسی پیچیده
- تقویت تفکر منطقی و گامبهگام در حل مسائل
- مناسب برای هنرجویان پایه دهم تا دانشگاه
- ایجاد علاقه به برنامهنویسی از طریق ابزار گرافیکی
- ایدهآل برای تدریس در کلاس یا استفاده فردی
- آشنایی همزمان با الگوریتم و زبانهای برنامهنویسی
- پشتیبانی از زبان فارسی

3- در مرحله بعدی متغیر را تعریف و نوع آن را مشخص کنید.

در غیر اینصورت با هشدار عدم تعریف متغیر روبرو شده و رنگ عنصر قرمز خواهد شد (شکل زیر).

در صورتی که متغیر را تعریف کنید ولی به آن مقدار ندهید در زمان نمایش مقدار آن، با خطای عدم مقداردهی به متغیر روبرو خواهید شد.
- برای حذف هر عنصر روی آن کلیک راست کرده و Delete را انتخاب کنید.
- بعد از اجرای برنامه پنجره (شکل زیر) نمایش داده خواهد شد.

انواع داده
نوع دادۀ عدد صحیح (Integer) یکی از رایجترین انواع داده در برنامهنویسی است. یک عدد صحیح میتواند یک عدد صحیح مثبت یا منفی را ذخیره کند، اما نمیتواند مقادیر کسری را ذخیره کند. بنابراین، میتواند مقادیری مانند 5، 42، 1947 را ذخیره کند، اما نمیتواند اعدادی مانند 3.2، 4/5 و غیره را ذخیره کند.
اگر عددی با مقدار کسری در یک عدد صحیح ذخیره شود، مقدار کسری آن حذف خواهد شد. از این رو، اگر عدد 3/2 در یک عدد صحیح ذخیره شود، فقط عدد 3 را حفظ خواهد کرد. پنجرۀ Variable Watch اعداد صحیح را به رنگ آبی نمایش میدهد.

نوع داده Real میتواند هر عددی را ذخیره کند - هم اعداد صحیح و هم اعداد یک با مقادیر کسری. در بسیاری از زبانها، به این نوع داده، «double» میگویند که برگرفته از استاندارد .پیادهسازی «double-precision floating point» است.
پنجرۀ نمایش متغیر، اعداد حقیقی را به رنگ بنفش نشان میدهد.

نوع داده String برای ذخیره هرگونه داده متنی استفاده میشود. این شامل کلمات، حروف یا هر چیز دیگری است که شما در یک پیام متنی ارسال میکنید. در برنامهنویسی، متن با علامت نقل قول دوگانه ('') مشخص میشود. به عنوان مثال: “computer“ ،“CSU, Sacramento“ و ”Year 1947“ همگی رشته هستند.
پنجرۀ Variable Watch رشتهها را به رنگ قرمز نمایش میدهد.

نوع داده بولین (منطقی) میتواند «درست» یا «نادرست» را در خود ذخیره کند. این دو، اساس تصمیمگیری در یک برنامه رایانهای هستند.
پنجرۀ Variable Watch مقادیر نقطه را به رنگ فیروزهای نمایش میدهد.

هر بار که یک تابع یا متغیر تعریف میکنید، یک نام منحصر به فرد به نام "شناسه" به آن داده میشود. برای جلوگیری از اشتباه گرفتن شناسهها با سایر موارد در یک عبارت، باید از یک قرارداد نامگذاری پیروی کنند. هر زبان برنامهنویسی یک قرارداد نامگذاری دارد و این قراردادها از زبانی به زبان دیگر نسبتاً ثابت هستند.
در Flowgorithm ،شناسهها باید از قوانین زیر پیروی کنند: (جدول زیر)
- آنها باید با یک حرف شروع شوند.
- بعد از حرف اول، شناسه میتواند شامل حروف یا اعداد اضافی باشد.
- فاصله مجاز نیست.
- نمیتوانند کلمات کلیدی یا کلماتی باشند که قبلاً توسط Flowgorithm تعریف شدهاند.
- زبانهایی مانند ویژوال بیسیک و سی نیز اجازه استفاده از کاراکتر زیرخط "_" را میدهند. با این حال، Flowgorithm این اجازه را نمیدهد.
- شناسهها به حروف کوچک و بزرگ حساس نیستند.
| یادداشتها | شناسههای معتبر |
|---|---|
| شناسهها میتوانند تکحرفی باشند. | x |
| اعداد بعد از حرف اول مجاز هستند | N2 |
کلمات کلیدی
زبانهای برنامهنویسی اغلب برای خوانایی بیشتر از کلماتی مانند «کلاس»، «عمومی» و «اگر» استفاده میکنند. اغلب، این کلمات با قرارداد نامگذاری مورد استفاده توسط شناسهها همپوشانی دارند. بنابراین، در این موارد، این کلمه «رزرو شده» در نظر گرفته میشود و نمیتوان از آن برای شناسهها استفاده کرد. بسیاری از زبانهای برنامهنویسی نیز توابع و سایر ثابتها را از پیش تعریف میکنند و نمیتوان از آنها استفاده کرد.
کلمات رزرو شده
Flowgorithm فقط چند کلمه رزرو شده دارد که در عبارات استفاده میشوند.
| true | pi | or | not | mod | false | and |
کلمات کلیدی نوع داده
برای جلوگیری از سردرگمی، سیستم به شناسهها اجازه نمیدهد از نام انواع داده استفاده کنند.
| string | real | integer | boolean |
کلمات کلیدی غیرمجاز (استفاده شده در توابع)
فلوگوریتم اجازه استفاده از نام توابع را نمیدهد.
| tostring | tan | random | cos | abs |
| toreal | tochar | sgn | int | arccos |
| tocode | sin | len | arcsin | |
| tofixed | size | log | arctan | |
| tointeger | sqrt | log 10 | char |
برای استفاده در آینده رزرو شده است
نسخههای آیندۀ Flowgorithm ممکن است تعداد توابع ذاتی را افزایش دهند. توابع زیر برای زمانی که روزی اضافه شوند، رزرو شدهاند.
| cosh | arccosh |
| sinh | arcsinh |
| tanh | arctanh |
تعریف متغیر (Declare)
از دستور Declare برای ایجاد متغیرها و آرایهها استفاده میشود. متغیرها برای ذخیره دادهها در حین اجرای برنامه مورد استفاده قرار میگیرند. میتوانید چندین متغیر را با جدا کردن نامها با کاما تعریف کنید.
در مثال شکل زیر متغیر Perimeter برای ذخیره مقدار مساحت و متغیر radius برای ذخیره مقدار شعاع تعریف شده است.

انتساب (Assign)
شکل تخصیص (Assign) برای ذخیره نتیجه یک محاسبه در یک متغیر استفاده میشود.
در مثال قبل شکل بالا یک دستور انتساب برای تخصیص «radius» به مقدار 7 استفاده میکند. در نهایت، مساحت یک دایره را محاسبه کرده و نتیجه را در «Primeter» ذخیره میکند.
ورودی (Input)
یک دستور ورودی، مقداری را از صفحه کلید میخواند و نتیجه را در یک متغیر ذخیره میکند.

خروجی (Output)
یک دستور خروجی، یک عبارت را ارزیابی میکند و سپس نتیجه را روی صفحه نمایش میدهد.

اگر (If)
یک دستور شرطی (If Statement) یک عبارت بولین را بررسی میکند و سپس براساس نتیجه، یکی از حالتهای درست یا نادرست (true or false) را اجرا میکند (شکل زیر).

مثال سمت راست، یک عدد صحیح به نام ’age’ تعریف میکند. سپس سن را از صفحه کلید میخواند. در نهایت، یک عبارت شرطی بررسی میکند که آیا سن بزرگتر یا مساوی 18 سال است یا خیر. بر این اساس، یا حالت نادرست را میگیرد و عبارت ”Sorry, not yet” را نمایش میدهد، یا حالت درست را میگیرد و عبارت ”!Go vote” را نمایش میدهد.
تا زمانیکه (While)
حلقه While یک عبارت بولین را ارزیابی میکند و سپس، در صورت درست بودن، یک بلوک از دستورات را اجرا میکند. پس از اجرای دستورات، دستور While عبارت را دوباره بررسی میکند. وقتی عبارت نادرست باشد، حلقه پایان مییابد (شکل زیر).

در فلوچارت سمت راست، اعداد 1 تا 100 را چاپ میکند. عبارت انتساب ”1 + n = n” متغیر ’n’ را در هر تکرار حلقه 1 واحد افزایش میدهد.
انجام دادن (Do)
حلقه Do مشابه حلقه While است با این تفاوت که بلوک دستورات حداقل یک بار قبل از بررسی عبارت اجرا میشود. (شکل زیر)

مثال یک دستور Do را نشان میدهد که فقط یک age معتبر را به عنوان ورودی میپذیرد. این دستور تا زمانی که متغیر ’age’ کمتر از 0 یا بیشتر از 110 باشد، حلقه را اجرا میکند.
برای (For)
حلقههای For یک متغیر را در محدودهای از مقادیر افزایش میدهند. این یک جایگزین رایج و مفید برای دستور While است (شکل زیر).

اعداد 1 تا 100 را چاپ میکند. حلقه 100 بار اجرا میشود. مقدار ’n’ از 1 شروع میشود و هر بار که حلقه اجرا میشود، 1 واحد افزایش مییابد. حلقه زمانی پایان مییابد که ’n’ به 100 برسد.
فعالیت (صفحهٔ 105 کتاب درسی)
هر یک از تمرینات را در برنامه Flowgorithm انجام دهید.
1- فلوچارتی که یک عدد دو رقمی از ورودی بگیرد و مجموع ارقام آن را چاپ کند رسم کنید.
2- فلوچارتی که یک عدد دو رقمی از ورودی بگیرد و مقلوب آن را چاپ کند رسم کنید.
3- فلوچارتی که حقوق یک کارمند را بگیرد سپس با کسر 5 درصد بیمه و 3 درصد مالیات حقوق خالص او را چاپ کند رسم کنید.
4- فلوچارتی رسم کنید که مجموع رقمهای یک عدد 5 رقمی را محاسبه کند.
5- فلوچارتی رسم کنید که اعداد تام (اعدادی که مجموع مقسوم علیههای آن با خود عدد برابر باشد مثل: 6 که مقسوم علیه آن 1 و 2 و 3 است که اگر آنها را با هم جمع کنید مساوی عدد 6 میشود.) کمتر از 1000 را چاپ کند.
6- فلوچارتی رسم کنید که یک عدد طبیعی را دریافت کند وآن را به عاملهای اولش تجزیه کند.
(مثال: 3 و $6 = 2$ و $12 = {2^2}3$ برای تجزیه عدد به عاملهای اول باید عدد را به اعداد اول 1 و 1 و 3 و 5 و 7 و... تقسیم کنید.($3/3 = 1$ و $6/2 = 3$ و $12/2 = 6$ مقسوم علیهها عاملهای اول عدد میباشند.))
7- الگوریتمی بنویسید که توانهای عدد 2 را تا توان nام آن محاسبه کند. (${2^ \circ } = 1$ و ${2^1} = 2$ و ${2^n}...$). فلوچارت آن را در نرمافزار رسم کنید.
8- الگوریتمی بنویسید که توانهای زوج عدد 4 را تا توان n ام آن محاسبه کند. فلوچارت آن را در نرمافزار رسم کنید.
9- روندنمای تعیین اعداد فیبوناچی کوچکتر از 100 را رسم کنید.
آرایه
آرایه یعنی یک جعبه بزرگ که داخل آن چند جعبه کوچک مرتب کنار هم گذاشته شده است. هر جعبه یک شماره دارد که داخل آن میتوان یک چیز خاص نگهداری کرد (مثلاً عدد، رنگ، اسم و...)
در حقیقت آرایهها مجموعهای از مقادیر هم نوع میباشند. برای دسترسی به هر مقدار از شماره (ایندکس) استفاده میشود. ایندکس محل قرارگیری هر مقدار در آرایه را نشان میدهند. ایندکسها از صفر شروع میشوند.
چرا آرایه لازم دارید؟
چون وقتی چند چیز شبیه به هم دارید، به جای اینکه هر کدام را جداگانه نگه دارید، همه آنها را مرتب در یک آرایه قرار میدهید. پس مرتب شده و پیدا کردن هر مورد آسانتر خواهد شد.
فرض کنید 5 نمره دارید: به جای اینکه بنویسید: نمره $18 = 1$ عدد، نمره $19 = 2$، نمره $17 = 3$، نمره $20 = 4$، نمره $16 = 5$ اگر به این صورت بنویسید نمرهها $[16,20,17,19,18] = $ حالا هر وقت نمره سوم را بخواهید فقط کافی است بنویسید. نمرهها [2]

فرض کنید یک آرایه بستنی دارید. بستنیها = [«وانیلی»، «شکلاتی»، «توت فرنگی»، «موزی»] برای دسترسی به «توت فرنگی» باید بنویسید. [2] بستنیها
مقدار دهی به خانههای آرایه: برای اینکه یک آرایه داشته باشید که بتواند مقادیری را در خود ذخیره کند، ابتدا باید آرایهای خالی ایجاد کنید.
الگوریتم ایجاد دنبالۀ اعداد فرد کوچکتر از 20:
1- شروع
2- آرایه خالی به اسم $fard = []$ بساز
3- از 1 شروع کن و در خانه اول آرایه قرار بده. $fard[] = 1$
4- هر بار 2 تا به مقدار قبلی اضافه کن و در آرایه قرار بده $fard[] = 2 + fard[]$
5- تا زمانی که به 20 برسی برو به مرحله 4
6- آرایه را نمایش بده
7- پایان
خروجی: $[1,3,5,7,9,11,13,15,17,19]$
دنباله فیبوناچی (Fibonacci Sequence)
دنباله فیبوناچی یک سری اعداد است که هر عدد $(F(n))$ حاصل جمع دو عدد قبلی در دنباله است. این دنباله با 0 و 10 شروع میشود:
$F(0) = 0,F(1) = 1 + F(0) = 0,F(1) = 1$
$F(n) = F(n - 1) + F(n - 2)$ و $n \geqslant 2F(n) = F(n - 1) + F(n - 2)$ برای $n \geqslant 2$
مثال سری اعداد فیبوناچی: 0 و 1 و 2 و 3 و 5 و 8 و 13 و 21 و...
$F(0) = 0\,,\,F(1) = 1\,,\,F(2) = 1\,,\,F(3) = 2\,,\,F(4) = 3\,,\,F(5) = 5\,,\,F(6) = 8$
جابجا کردن خانههای آرایه:
الگوریتم جابجایی دو مقدار آرایه:
8- شروع
9- مقدار خانه i را در یک متغیر کمکی (temp) ذخیره کن.
10- مقدار خانه j را درخانه i بریز.
11- مقدار قبلی خانه i (این مقدار در temp ذخیره شده بود) را داخل خانه j بریز.
12- پایان
فعالیت (صفحهٔ 107 کتاب درسی)
الگوریتمی بنویسید که بتواند n عدد را از کاربر دریافت کرده و آنها مرتب کند. روندنمای آن را رسم کنید.
فعالیت (صفحهٔ 108 کتاب درسی)
الگوریتم تولید دنباله فیبوناچی را بنویسید.
مبناها
در این بخش برای تبدیل مبناها ابتدا با مفهوم و کاربرد مبناها آشنا خواهید شد.
مبناها سیستمهایی برای نمایش اعداد هستند که بر اساس تعداد ارقام مجاز در هر سیستم تعریف میشوند. هر مبنا (Base) نشاندهندۀ تعداد ارقام منحصر به فردی است که برای نمایش اعداد در آن سیستم استفاده میشود.
مبنای دودویی (Binary)
تنها دو رقم 0 و 1 ـ زبان اصلی رایانهها و سیستمهای دیجیتال هستند.
فایلها، تصاویر و برنامهها همگی بهصورت رشتههای باینری ذخیره میشوند.
تمام دستورات و محاسبات در سطح سختافزار با باینری انجام میشود.
کامپیوترها دادهها را با سیگنالهای الکتریکی (0 = خاموش، 1 = روشن) پردازش میکنند؛ بنابراین مبنای 2 زبان طبیعی آنهاست.
رایانه از مبنای باینری طبق مراحل زیر برای پخش فیلم استفاده میکند:
1- ذخیرهسازی: فیلم بهصورت میلیونها 0 و 1 در HDD و SSD ذخیره میشود.
2- پردازش CPU: با دستورالعملهای باینری، این دادهها را از حافظه میخواند.
3- نمایش: کارت گرافیک دادهها را به سیگنالهای تصویری تبدیل میکند (مثلاً هر پیکسل با کد هگزادسیمال رنگش مشخص میشود).
سیستم کدگذاری (Coding System) در رایانه
سیستمهای کدگذاری در رایانه روشهایی هستند که برای نمایش و ذخیرهسازی اطلاعات (متن، اعداد، تصاویر، صدا، ویدئو و...) بهصورت دیجیتالی استفاده میشوند. این سیستمها دادهها را بهصورت بیتها (0 و 1) تبدیل میکنند تا برای پردازش توسط سختافزار و نرمافزار قابل فهم باشند. در حقیقت سیستمهای کدگذاری پل ارتباطی بین دنیای دیجیتال (بیتها) و انسانها (متن، تصویر، صدا) هستند. انتخاب استاندارد مناسب به نوع داده، کاربرد، و نیاز به فشردهسازی یا امنیت بستگی دارد.
سیستم کدگذاری ASCII (American Standard Code for Information Interchange)
اولین استاندارد برای کدگذاری کاراکترهای لاتین (انگلیسی، نمادها، اعداد).
از 7 بیت (128 کاراکتر) و در نسخههای توسعه یافته از 8 بیت (256 کاراکتر؛ که تا 128 کد آن همان کد اسکی استاندارد بوده و مابقی دارای هیچ استانداری نیست و در رایانههای مختلف ممکن است متفاوت باشد) استفاده میکند. مثلاً:
$A \to 65(01000001)$
$5 \to 53(00110101)$
استاندارد جهانی برای پشتیبانی از تمامی زبانها و نمادهای جهان (UNICOD)
با گسترش اینترنت و ارتباطات جهانی، نیاز به سیستمی بود که تمامی زبانهای زنده، تاریخی و نمادهای مختلف نظیر نمادهای ریاضی و موسیقی را در خود جای دهد.
مثلاً یک صفحه وب باید بتواند همزمان متن فارسی، چینی، ایموجی و فرمولهای ریاضی را نمایش دهد و از یک سیستم کدگذاری یکسان برای جلوگیری از به هم ریختگی نمایش اسناد در سیستمهای مختلف، سیستم کدگذاری با استاندارد جهانی جایگزین سیستمهای کدگذاری قدیمیتر شد. این استاندارد یک کد به نویسههای مشترک در چند زبان مختلف اختصاص میدهد نسخه جدید یونی کد دارای 144697 CODE POINT است که 128 CODE POINT ابتدای، همانند کدهای اسکی هستند و در یونی کد نویسهها بهصورت 32 بیتی تعریف میشوند. بسیاری از نرمافزارها برای ارسال و دریافت اطلاعات در اینترنت با نویسههای 8 بیتی کار میکنند که برای ارسال و دریافت 32 بیت به پهنای باند بیشتر نیاز دارند. دراین موارد از 8-UTF (قالب 8 بیتی انتقال مجموعه نویسهای جهانی) استفاده میشود.
کنجکاوی (صفحهٔ 110 کتاب درسی)
درباره 8-UTF و نسخههای مختلف آن تحقیق کنید و در کلاس ارائه دهید.
مبنای 8 (Octal)
ارقام 0 تا 7 ـ در گذشته برای نمایش دستورالعملهای رایانهای استفاده میشد.
${(1234567)_8} = 1 \times {8^6} + 2 \times {8^5} + 3 \times {8^4} + 4 \times {8^3} + 5 \times {8^2} + 6 \times {8^1} + 7 \times {8^0} = {(342391)_{10}}$
در تنظیمات دسترسی فایلها در سیستم عامل لینوکس از این سیستم شمارشی استفاده میشود.
مبنای 16 (Hexadecimal)
ارقام 0 تا 9 و حرف A تا $(A = 10\,,\,B = 11\,,\,C = 12\,,\,D = 13\,,\,E = 14\,,\,F = 15) - F$
سیستم هگزادسیمال در برنامهنویسی سطح پایین، آدرس فیزیکی منحصر به فرد کارت شبکه (MAC Address)، آدرسدهی حافظه، توصیف رنگ در صفحات وب استفاده میشود.
برای نمونه آدرس فیزیکی کارت شبکهای بهصورت زیر است:
94 - DE - 80 - 5F - BE - AB
این آدرس یک عدد هگزادسیمال 12 رقمی است، معادل باینری آن بهصورت زیر نمایش داده میشود که 48 رقم را شامل میشود:
100100100-10111110-10000000-01101111-10111110-10101011
کنجکاوی (صفحهٔ 111 کتاب درسی)
در سیستم عاملهای مختلف چه روشی برای دیدن آدرس فیزیکی کارت شبکه وجود دارد؟
یکی دیگر از کاربردها سیستم هگزادسیمال کاربرد آن در سیستم رنگ میباشد.
سیستم رنگ RGB: یک مدل رنگی مبتنی بر ترکیب سه رنگ قرمز (Red)، سبز (Green) و آبی (Blue) است که بهصورت جمعی (نور محور) برای ایجاد طیف گستردهای از رنگها استفاده میشود. این سیستم بهطور گسترده در نمایشگرهای دیجیتال (مانند مانیتورها، تلویزیونها)، طراحی گرافیک و برنامهنویسی کاربرد دارد.
هر رنگ در این سیستم با سه مقدار بین 0 تا 255 (در مبنای 10) مشخص میشود:
(شدت کامل) 255 تا 0 :(R) قرمز
.255 تا 0 :(G) سبز
.255 تا 0 :(B) آبی
محدودۀ هر کانال رنگ (0 تا 255) دقیقاً برابر با یک بایت (8 بیت) است، میتوان آن را بهصورت دو رقم هگزادسیمال (مبنای 16) نمایش داد.
هر رقم هگزادسیمال نشاندهندۀ 4 بیت است (0 تا F).
مقادیر هگزادسیمال برای RGB به شکل RRGGBB نوشته میشوند:
مقدار قرمز (دو رقم هگز) RR:
مقدار سبز: GG
مقدار آبی: BB
با مقایسه دو سیستم شمارش مشخص میشود سیستم هگزادسیمال بهدلایل زیر برای نمایش رنگها مورد استفاده قرار میگیرد:
نمایش 255 با دو رقم هگز (FF) سادهتر از نمایش دودویی (11111111) یا دهدهی است.
هگزادسیمال بهراحتی با سیستمهای دیجیتال (بایت محور) کار میکند.
برای توسعهدهندگان و طراحان، تشخیص رنگها از روی کد هگز آسانتر است.
کنجکاوی (صفحهٔ 111 کتاب درسی)
کد رنگ سفید و سیاه در سیستم هگزا دسیمال معادل چه مقداری میباشد؟
هر 4 رقم در مبنای باینری، معادل یک رقم در مبنای 16 میباشد.

برای تبدیل اعداد در مبناهای به مبنای 10 کافی است طبق مثال انجام دهید. مثال ${10110_{(2)}} = 22$

از ماشین حساب رایانه خود استفاده کنید و اعداد را به مبناهای خواسته تبدیل کنید. (شکل زیر)

${(1111001110101011)_2} = {(\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,)_{16}}$
$AD{98_{16}} = {(\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,)_{10}}$
${(210067)_8} = {(\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,)_{10}}$
برای تبدیل اعداد در مبنای 10 به مبنای 2 از تقسیمهای متوالی استفاده میشود.
الگوریتم تبدیل عدد در مبنای 10 به مبنای 2:
1- شروع
2- عدد را بر 2 تقسیم کنید و باقیمانده را یادداشت کنید (0 یا 1).
3- خارج قسمت جدید را مجدداً بر 2 تقسیم کنید و باقیمانده را ثبت کنید.
4- این فرایند را تا زمانی ادامه دهید که خارج قسمت به صفر برسد.
5- باقیماندهها را از آخرین به اولین (از پایین به بالا) بخوانید تا عدد در مبنای 2 بهدست آید.
6- پایان
7- برای الگوریتم نوشته شده روندنما رسم کنید. برای اعداد دیگری الگوریتم را بازنگری کنید.
کنجکاوی (صفحهٔ 113 کتاب درسی)
تحقیق کنید از چه روش دیگری میتوانید این تبدیل مبنا را انجام دهید. نتیجه را در کلاس ارائه دهید.
فعالیت کلاسی (صفحهٔ 113 کتاب درسی)
الگوریتمی بنویسید که بتواند عدد ورودی در مبنای 16 را به مبنای 10 تبدیل کند. برای این الگوریتم روندنما رسم کنید. روندنما را بازنگری کنید.